package com.example.membersteward.util;

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.util.Collection;
import java.util.Date;
import java.util.UUID;

public class BaseUtils {
    public static final String NULL_STR = "";

    public static final String DATE_FORMAT_1 = "yyyyMMdd";

    public static final String DATE_FORMAT_2 = "yyyy-MM-dd";
    public static final String DATE_FORMAT_3 = "yyyyMMddHHmmss";
    public static final String DATE_FORMAT_4 = "yyyy-MM-dd HH:mm:ss";
    public static final String DATE_FORMAT_5 = "yyyy/MM/dd HH:mm:ss";
    public static final String DATE_FORMAT_6 = "yyyyMMdd HH:mm:ss";

    /**
     * * 判断一个字符串是否为空串
     *
     * @param str String
     * @return true：为空 false：非空
     */
    public static boolean isEmpty(String str) {
        return isNull(str) || NULL_STR.equals(str.trim());
    }

    /**
     * * 判断一个字符串是否为非空串
     *
     * @param str String
     * @return true：非空串 false：空串
     */
    public static boolean isNotEmpty(String str) {
        return !isEmpty(str);
    }


    /**
     * * 判断一个对象是否为空
     *
     * @param object Object
     * @return true：为空 false：非空
     */
    public static boolean isNull(Object object) {
        return object == null;
    }

    /**
     * * 判断一个对象是否非空
     *
     * @param object Object
     * @return true：非空 false：空
     */
    public static boolean isNotNull(Object object) {
        return !isNull(object);
    }

    /**
     * * 判断一个Collection是否为空， 包含List，Set，Queue
     *
     * @param coll 要判断的Collection
     * @return true：为空 false：非空
     */
    public static boolean isEmpty(Collection<?> coll) {
        return isNull(coll) || coll.isEmpty();
    }

    /**
     * * 判断一个Collection是否非空，包含List，Set，Queue
     *
     * @param coll 要判断的Collection
     * @return true：非空 false：空
     */
    public static boolean isNotEmpty(Collection<?> coll) {
        return !isEmpty(coll);
    }
    /**
     * * 判断一个对象数组是否为空
     *
     * @param objects 要判断的对象数组
     ** @return true：为空 false：非空
     */
    public static boolean isEmpty(Object[] objects)
    {
        return isNull(objects) || (objects.length == 0);
    }

    /**
     * * 判断一个对象数组是否非空
     *
     * @param objects 要判断的对象数组
     * @return true：非空 false：空
     */
    public static boolean isNotEmpty(Object[] objects)
    {
        return !isEmpty(objects);
    }
    /**
     * String提供的方法会把null转为 null字符串
     *
     * @param obj
     * @return ojb转string
     */
    public static String valueOf(Object obj) {
        return (obj == null) ? null : obj.toString();
    }

    /**
     * 将2025-01-01 00：00：00 转换成 2025-01-01 23：59：59
     *
     * @param date
     * @return
     */
    public static Date getMaxDate(Date date) {
        try {
            LocalDate endLocalDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
            LocalDateTime endOfDay = endLocalDate.atTime(LocalTime.MAX);
            return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());
        } catch (Exception e) {
            return date;
        }
    }

    /**
     * 将2025-01-01 00：00：00 转换成 2025-01-01 00：00：00
     *
     * @param date
     * @return
     */
    public static Date getMinDate(Date date) {
        try {
            LocalDate startLocalDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
            LocalDateTime startOfDay = startLocalDate.atStartOfDay();
            return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());
        } catch (Exception e) {
            return date;
        }
    }

    /**
     * 将Date转成String 格式是pattern
     *
     * @param date 日期
     * @param pattern 转换了类型
     * @return 如果格式不对，返回null
     */
    public static String Date2String(Date date, String pattern) {
        try {
            Instant instant = date.toInstant();
            // 将 Instant 转换为 LocalDateTime
            LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
            return localDateTime.format(formatter);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 将String转成Date 格式是pattern
     * @param date 日期
     * @param pattern 转换的类型
     * @return 格式不对 返回null
     */
    public static Date String2Date(String date, String pattern) {
        try {
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
            // 解析字符串为 LocalDate 对象
            LocalDate localDate = LocalDate.parse(date, formatter);
            return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
        } catch (Exception e) {
            return null;
        }
    }

    public static String getUUID() {
        return UUID.randomUUID().toString().replaceAll("-","");
    }
}
